package com.fragrance.service.impl;

import java.util.Date;
import java.util.Map;
import java.util.TreeMap;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fragrance.service.SimBossService;
import com.fragrance.simboss.SimBossUtils;
import com.fragrance.util.Constants;

public class SimBossServiceImpl implements SimBossService {

	private final static Logger logger = LoggerFactory
			.getLogger(SimBossServiceImpl.class);

	private static final String ICCID_TYPE = "iccid";

	private static final String IMSI_TYPE = "imsi";

	/**
	 * 账户总览接口
	 * @return
	 */
	public JSONObject getAccountInfo() {
		JSONObject jobj = new JSONObject();
		// api url
		String apiUrl = SimBossUtils.BASE_DOMAIN_URL
				+ "/2.0/user/dashboard/get";
		// 参数
		Map<String, String> params = new TreeMap<String, String>();
		// 系统参数
		params.put("appid", SimBossUtils.APPID);
		params.put("timestamp", String.valueOf(new Date().getTime()));
		// 签名
		String sign = SimBossUtils.calcSign(params, SimBossUtils.APPSECRET);
		params.put("sign", sign);
		// 提交请求
		String json = SimBossUtils.post(apiUrl, params);
		// 解析json返回结果， 此处略过
		if (StringUtils.isNoneBlank(json)) {
			try {
				// 解析json返回结果， 此处略过
				jobj = JSON.parseObject(json);
				if (SimBossUtils.checkSuccess(jobj)) {
					return jobj;
				} else {
					logger.info("runningStatus失败：{}", json);
				}
			} catch (Exception e) {
				logger.error("runningStatus发生异常", e);
			}
		}
		return jobj;
	}

	/**
	 * 
	 * */
	public JSONObject runningStatus(String cardIdType, String cardId) {
		JSONObject jobj = new JSONObject();
		if (StringUtils.isBlank(cardId)) {
			jobj.put("code", Constants.PARAM_VAILD_CODE);
			jobj.put("message", Constants.PARAM_VAILD_MSG);
			return jobj;
		}
		// api url
		String apiUrl = SimBossUtils.BASE_DOMAIN_URL
				+ "/2.0/device/runningStatus";
		// 参数
		Map<String, String> params = new TreeMap<String, String>();
		// 系统参数
		params.put("appid", SimBossUtils.APPID);
		params.put("timestamp", String.valueOf(new Date().getTime()));
		// 应用参数
		if (ICCID_TYPE.equals(cardIdType)) {
			params.put("iccid", cardId);
		} else if (IMSI_TYPE.equals(cardIdType)) {
			params.put("imsi", cardId);
		} else {
			logger.info("cardIdType参数只能是iccid或者imsi");
			jobj.put("code", Constants.PARAM_VAILD_CODE);
			jobj.put("message", Constants.PARAM_VAILD_MSG);
			return jobj;
		}
		// 签名
		String sign = SimBossUtils.calcSign(params, SimBossUtils.APPSECRET);
		params.put("sign", sign);
		// 提交请求
		String json = SimBossUtils.post(apiUrl, params);
		if (StringUtils.isNoneBlank(json)) {
			try {
				// 解析json返回结果， 此处略过
				jobj = JSON.parseObject(json);
				if (SimBossUtils.checkSuccess(jobj)) {
					return jobj;
				} else {
					logger.info("runningStatus失败：{}", json);
				}
			} catch (Exception e) {
				logger.error("runningStatus发生异常", e);
			}
		}
		return jobj;
	}

	public JSONObject detail(String cardIdType, String cardId) {
		JSONObject jobj = new JSONObject();
		if (StringUtils.isBlank(cardId)) {
			jobj.put("code", Constants.PARAM_VAILD_CODE);
			jobj.put("message", Constants.PARAM_VAILD_MSG);
			return jobj;
		}
		// api url
		String apiUrl = SimBossUtils.BASE_DOMAIN_URL + "/2.0/device/detail";
		// 参数
		Map<String, String> params = new TreeMap<String, String>();
		// 系统参数
		params.put("appid", SimBossUtils.APPID);
		params.put("timestamp", String.valueOf(new Date().getTime()));
		// 应用参数
		if (ICCID_TYPE.equals(cardIdType)) {
			params.put("iccid", cardId);
		} else if (IMSI_TYPE.equals(cardIdType)) {
			params.put("imsi", cardId);
		} else {
			logger.info("cardIdType参数只能是iccid或者imsi");
			jobj.put("code", Constants.PARAM_VAILD_CODE);
			jobj.put("message", Constants.PARAM_VAILD_MSG);
			return jobj;
		}
		// 签名
		String sign = SimBossUtils.calcSign(params, SimBossUtils.APPSECRET);
		params.put("sign", sign);
		// 提交请求
		String json = SimBossUtils.post(apiUrl, params);
		// 解析json返回结果， 此处略过
		if (StringUtils.isNoneBlank(json)) {
			try {
				// 解析json返回结果， 此处略过
				jobj = JSON.parseObject(json);
				if (SimBossUtils.checkSuccess(jobj)) {
					return jobj;
				} else {
					logger.info("detail失败：{}", json);
				}
			} catch (Exception e) {
				logger.error("detail发生异常", e);
			}
		}
		return jobj;
	}
}
